package PureFactoryClasses;

import Classes.Contacto;
import Classes.Empresa;
import Classes.Persona;
import java.util.Observable;
import java.util.Observer;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Juampi
 */
public class TableModelContactos extends DefaultTableModel implements Observer {

    public static final int RAZON_SOCIAL = 0;
    public static final int DIRECCION = 1;
    public static final int TELEFONO = 2;
    public static final int EMAIL = 3;
    public static final int TIPO = 4;
    public static final int CONTACTO = 5;
    public static final int CANT_COLUMNS = 6;
    public static final String EMPRESA = "E";
    public static final String PERSONA = "P";

    public void addPersona(Persona persona) {
        Object[] newRow = new Object[CANT_COLUMNS];
        newRow[RAZON_SOCIAL] = persona.getNombre();
        newRow[DIRECCION] = persona.getDireccion();
        newRow[TELEFONO] = persona.getTelefono();
        newRow[EMAIL] = persona.getCorreoElectronico();
        newRow[TIPO] = PERSONA;
        newRow[CONTACTO] = persona;
        persona.addObserver(this);
        this.addRow(newRow);
    }

    public void addEmpresa(Empresa empresa) {
        Object[] newRow = new Object[CANT_COLUMNS];
        newRow[RAZON_SOCIAL] = empresa.getRazonSocial();
        newRow[DIRECCION] = empresa.getDireccion();
        newRow[TELEFONO] = empresa.getTelefono();
        newRow[EMAIL] = empresa.getCorreoElectronico();
        newRow[TIPO] = EMPRESA;
        newRow[CONTACTO] = empresa;
        empresa.addObserver(this);
        this.addRow(newRow);
    }

    @Override
    public boolean isCellEditable(int row, int column) {
        return false;

    }

    public void update(Observable o, Object arg) {
        Contacto contacto = (Contacto) o;
        int i = 0;
        while ((contacto != (Contacto) this.getValueAt(i, CONTACTO)) && (i < this.getRowCount())) {
            i++;
        }
        if (i < this.getRowCount()) {
            if (this.getValueAt(i, TIPO).equals(EMPRESA)) {
                Empresa empresa = (Empresa) contacto;
                this.setValueAt(empresa.getRazonSocial(), i, RAZON_SOCIAL);
                this.setValueAt(empresa.getDireccion(), i, DIRECCION);
                this.setValueAt(String.valueOf(empresa.getTelefono()), i, TELEFONO);
                this.setValueAt(empresa.getCorreoElectronico(), i, EMAIL);
            } else {
                Persona persona = (Persona) contacto;
                this.setValueAt(persona.getNombre(), i, RAZON_SOCIAL);
                this.setValueAt(persona.getDireccion(), i, DIRECCION);
                this.setValueAt(String.valueOf(persona.getTelefono()), i, TELEFONO);
                this.setValueAt(persona.getCorreoElectronico(), i, EMAIL);
            }
        }
    }
}
